﻿Public Class Lokaal_bezetting
    Dim toOutlookClass As New toOutlook

    Dim huidigeRegel() As String
    Dim BezigInBlok As Boolean = False
    Dim tempVak As String
    Dim datum As String
    Dim startdatum As Date
    Dim volgende As Boolean = True
    Dim aanwezig As Boolean = False
    Dim laatstedatum As String
    Private Sub Lokaal_bezetting_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        generateLokaalBezetting()

        '
        'Voorbeeld blok
        '
        'Vak        = Uf ,,com2v,,dsn2v,,ict2v
        'Klas       = Uk ,,m21p3,,m22p3,,m23p3,,m24p3
        'Leraar     = Ul ,,kui,,man,,vuh
        'Lokaal     = Ur ,,R1_3.18
        '??         = Uz1 1 4 1 1
        '??         = Uz2 1 4 2 1           n
        '??         = Uz3 1 4 3 1            ,"flash"
        'Les?       = UZ00 ,5/1,,R1_3.18
        'Les?       = UZ00 ,5/2,,R1_3.18
        'Duur(week) = 0U ,6558,wk2-8,wk2-8,"t/b",,,,,,,,,Bn,,,,0,398341502
        ''
    End Sub

    Private Function checkCharacterReference(ByVal word As String) As String
        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
        ' voorbeelden zijn de tekens <, >, &, ' en "

        If word.IndexOf("&") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("&")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&amp;")

        ElseIf word.IndexOf(">") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf(">")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&gt;")

        ElseIf word.IndexOf("<") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("<")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&lt;")

        ElseIf word.IndexOf("'") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("'")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&apos;")
        End If

        Return word
    End Function


    Public Sub generateLokaalBezetting()

        Dim tijdstip As String()

        For Each regel In Form1.tbCSV.Lines

            'Lokaal selectie

            If regel.StartsWith("Ur") Then

                huidigeRegel = Split(regel, ",")

                For y = 0 To huidigeRegel.Length - 1
                    If huidigeRegel(y) <> "" And huidigeRegel(y) <> "Ur " Then

                        If lbl.Items.Contains(huidigeRegel(y)) = False Then
                            lbl.Items.Add("")
                            lbl.Items.Add("_______________")
                            lbl.Items.Add("")
                            lbl.Items.Add(huidigeRegel(y))
                            cb.Items.Add(huidigeRegel(y))
                        End If
                    End If
                Next
            End If


            If regel.StartsWith("AA02 ") Then
                huidigeRegel = Split(regel, " ")
                datum = CStr(huidigeRegel(1))
                datum = datum.Insert(4, "/")
                datum = datum.Insert(7, "/")
                startdatum = datum
            End If


            If regel.StartsWith("UZ00") Then


                huidigeRegel = Split(regel, ",")

                For y = 0 To huidigeRegel.Length - 1
                    If huidigeRegel(y) <> "" And huidigeRegel(y) <> "UZ00 " And Not CStr(huidigeRegel(y)).StartsWith("R") And Not CStr(huidigeRegel(y)).StartsWith("J") And (huidigeRegel(y)).Contains("/") Then
                        tijdstip = Split(huidigeRegel(y), "/")


                        If CStr(startdatum.AddDays(tijdstip(0))) <> laatstedatum Then
                            lbl.Items.Add("")
                        End If

                        lbl.Items.Add((startdatum.AddDays(tijdstip(0))) & " " & (tijdstip(1)))
                        laatstedatum = (startdatum.AddDays(tijdstip(0)))
                        '   lbl.Items.Add(tijdstip(1))
                        If (cbd.Items.Contains(startdatum.AddDays(tijdstip(0)))) = False Then

                            cbd.Items.Add(startdatum.AddDays(tijdstip(0)))
                        End If
                    End If
                Next
            End If


            If regel.IndexOf("0U") = 0 Then
                ' Selecteer de Week => 0U is de tag voor de weken
                Dim huidigeRegel_0U() As String
                Dim teZoekenString As String = regel

                ' Split de huidige regel op basis van de comma's
                huidigeRegel_0U = Split(teZoekenString, ",")

                For n = 0 To UBound(huidigeRegel_0U)
                    huidigeRegel_0U(n) = huidigeRegel_0U(n).Trim
                    ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                    ' voorbeelden zijn de tekens <, >, &, ' en "
                    huidigeRegel_0U(n) = checkCharacterReference(huidigeRegel_0U(n))
                Next

                'MessageBox.Show(huidigeRegel_0U(2))

                Dim week As String = huidigeRegel_0U(2)
                Dim weekOutput As String = ""


                If huidigeRegel_0U(2) <> Nothing Then
                    week = week.Remove(0, 2)
                    ' Functie getWeken retourneert de weken in leesbare formaat
                    ' wk1-57-10 wordt bijvoorbeeld 1,2,3,4,5,7,8,9,10
                    ' wk18-10 wordt bijvoorbeeld 1,8,9,10
                    getWeken(week)

                    For n = 0 To Form1.lbWeken.Items.Count - 1
                        If n <> Form1.lbWeken.Items.Count - 1 Then
                            weekOutput = weekOutput + Form1.lbWeken.Items(n).ToString & ","
                        Else
                            weekOutput = weekOutput + Form1.lbWeken.Items(n).ToString
                        End If
                    Next
                Else
                    ' Zodra in het UNTIS bestand geen week is opgegeven door de roostermaker
                    ' dan doen we er niets mee. Tenzij T.Huberts ermee akkoord gaat dat we
                    ' een weekRandomizer gaan toepassen.
                    weekOutput = ""
                End If

                'vanaf hier door Ruud

                'Dim tempWeken() As String
                'Dim tempStartDatum As Date = startdatum
                'Dim temp As String

                'If weekOutput = "" Then
                '    temp = "1,2,3,4,5,6,7,8,9,10"
                'Else
                '    temp = weekOutput
                'End If
                'tempWeken = Split(temp, ",")

                'For y = 0 To tempWeken.Length - 1
                '    If tempWeken(y) = "" Then
                '        tempWeken(y) = 0
                '    End If


                '    tempStartDatum = tempStartDatum.AddDays(((Int(tempWeken(y)) * 7) + (tijdstip(0) - 1)))
                '    lbl.Items.Add(tempStartDatum & " " & (tijdstip(1)))
                'Next

            End If

        Next

    End Sub

    Private Sub cb_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb.SelectedIndexChanged

        ' zoeken naar lokaal bezetting
        'MessageBox.Show(cb.SelectedItem)


        'MessageBox.Show(lbl.FindString(cb.SelectedItem))
        lbl.SetSelected(lbl.FindString(cb.SelectedItem), True)

        'cbd

    End Sub





    Private Function getWeken(ByVal input As String) As String
        Dim eersteBlok As String = ""
        Dim lengteBlok1 As Integer

        Dim tweedeblok As String
        Dim posTeken1 As Integer
        Dim posTeken2 As Integer

        posTeken1 = input.IndexOf("-")

        If posTeken1 = -1 Then
            ' Wanneer er geen min-teken gevonden is dan gaan we ervan uit dat de weekformat
            ' bijvoorbeeld als volgt is: 
            ' wk1236789
            ' wk1368
            ' en ga zo maar door!

            Form1.lbWeken.Items.Clear()

            Dim i As Integer
            Dim lengteOutput As Integer
            Dim nulTeken As Boolean = False
            Dim output As String = ""

            i = 0
            For Each character In input
                i = i + 1
                Form1.lbWeken.Items.Add(character)
                If character = "0" Then
                    nulTeken = True
                End If
            Next

            If nulTeken = True Then
                ' Verwijder de karakter 0, welke zich op de positie i-1 bevind
                ' vervolgens de karakter 1 verwijderen welke zich op de positie i -2 bevind
                ' ten slotte op de positie i-2 de karakter 10 plaatsen
                Form1.lbWeken.Items.RemoveAt(i - 1)
                Form1.lbWeken.Items.RemoveAt(i - 2)
                Form1.lbWeken.Items.Insert(i - 2, "10")
            End If

            For n = 0 To Form1.lbWeken.Items.Count - 1
                output = output + CStr(Form1.lbWeken.Items(n)) & ","

            Next

            ' Bepalen hoe groot de lengte van de variabel output is
            ' om hiermee de positie van de laatste comma te kunnen bepalen
            ' zodat deze ook verwijderd kan worden
            lengteOutput = output.Length
            output = output.Remove(lengteOutput - 1, 1)

        Else
            ' Wanneer er wel min-teken gevonden is dan gaan we ervan uit dat de weekformat
            ' bijvoorbeeld als volgt is:
            ' wk2-46-8
            ' wk1-478
            ' wk1-810
            ' wk13-10
            ' wk1-10
            ' wk13-8
            ' wk1-46-8
            ' wk1-57-10

            If input.Substring(1, 1) <> "-" Then
                ' Controle of de min-teken op de 1e positie staat
                ' Zodra dat niet het geval is dan bestaat het eerste blok uit 
                ' 1 cijfer dat op de positie input.substring(0,1) (de nulde positie) staat
                eersteBlok = input.Substring(0, 1)
            Else
                If input.Length = 3 Then
                    If input.Substring(1, 1) = "-" Then
                        eersteBlok = input.Substring(0, posTeken1 + 2)
                    End If
                Else
                    If input.Substring(1, 1) = "-" And input.Substring(posTeken1 + 2, 1) = "0" Then
                        eersteBlok = input.Substring(0, posTeken1 + 3)
                    Else

                        If input.Substring(posTeken1 + 2, 1) = "0" Then
                            eersteBlok = input.Substring(0, posTeken1 + 3)
                        Else
                            eersteBlok = input.Substring(0, posTeken1 + 2)
                        End If
                    End If
                End If

            End If

            lengteBlok1 = eersteBlok.Length

            ' Bepalen of er een 2e blok periode aanwezig is d.m.v. te zoeken op de min teken
            If input.IndexOf("-", lengteBlok1) <> -1 Then
                posTeken2 = input.IndexOf("-", lengteBlok1)
            End If

            tweedeblok = input.Substring(lengteBlok1, input.Length - lengteBlok1)

            'MessageBox.Show("1e blok: " & eersteBlok & NewLine _
            ' & "2e blok: " & tweedeblok)

            fillLboxWeken(eersteBlok, tweedeblok)
        End If
        ' We returnen niets naar het aanroepend programmacode
        ' indien gewenst kan er nog een status bericht geretourneerd worden
        Return Nothing
    End Function

    Private Function fillLboxWeken(ByVal eersteBlok As String, ByVal tweedeBlok As String) As String
        Dim input = eersteBlok
        Dim beginWeek As Integer
        Dim eindWeek As Integer

        Form1.lbWeken.Items.Clear()

        beginWeek = CInt(input.Substring(0, 1))

        If input.Length = 1 Then ' Zodra het eerste blok maar uit 1 week bestaat
            beginWeek = CInt(input.Substring(0, 1))
            eindWeek = CInt(input.Substring(0, 1))
        Else
            ' Zodra het eerste blok niet uit 1 week bestaat eerst controleren
            ' of het laatste week, week 10 is (check op cijfer 0)
            If input.IndexOf("0") <> -1 Then ' Zodra de 0 gevonden is 
                eindWeek = CInt(input.Substring(2, 2))
            Else
                ' Zodra het laatste week, niet week 10 is dan het cijfer pakken
                ' na de min teken.
                eindWeek = CInt(input.Substring(2, 1))
            End If

        End If

        For n = beginWeek To eindWeek
            Form1.lbWeken.Items.Add(n)
        Next

        If tweedeBlok.Length <> 0 Then
            input = tweedeBlok

            beginWeek = CInt(input.Substring(0, 1))

            If input.Length = 1 Then
                beginWeek = CInt(input.Substring(0, 1))
                eindWeek = CInt(input.Substring(0, 1))
            ElseIf input.Length = 2 And input.Substring(1, 1) <> "0" Then
                beginWeek = CInt(input.Substring(0, 1))
                eindWeek = CInt(input.Substring(1, 1))
            ElseIf input.Length = 2 And input.Substring(1, 1) = "0" Then
                beginWeek = CInt(input.Substring(0, 2))
                eindWeek = CInt(input.Substring(0, 2))
            Else

                If input.IndexOf("0") <> -1 Then
                    ' Zodra de week als volgt is opgebouwd wk13-10 dan wordt
                    ' eindWeek via de substring functie bepaald

                    '             12
                    'index      0123
                    'waarde     3-10
                    eindWeek = CInt(input.Substring(2, 2))
                Else
                    eindWeek = CInt(input.Substring(2, 1))
                End If

            End If
        Else

        End If

        If tweedeBlok.Length <> 0 Then
            For n = beginWeek To eindWeek
                Form1.lbWeken.Items.Add(n)
            Next
        End If

        ' We returnen niets naar het aanroepend programmacode
        ' indien gewenst kan er nog een status bericht geretourneerd worden
        Return Nothing
    End Function


End Class